package com.mmy.dao.scenic;

import java.util.List;
import java.util.Map;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import com.mmy.domain.scenic.VScenicPlan;

public interface VScenicPlanRepository extends JpaRepository<VScenicPlan, Integer> {

	/*
	 * 根据id查找
	 */
	@Query(value = "select *  from vScenicPlan where iPlanID = :iPlanID", nativeQuery = true)
	VScenicPlan findByID(@Param("iPlanID") int iPlanID);

	/*
	 * 根据name查找
	 */
	@Query(value = "select *  from vScenicPlan where cScenicName like %:strScenicName%", nativeQuery = true)
	List<VScenicPlan> findByName(@Param("strScenicName") String strScenicName);

	/**
	 * 通过景区ID查询 进入计划单页面
	 *
	 * 后台查询该景区计划单时用到 以开始时间倒序
	 * 
	 * @author 创建人shangzl 修改人 hanxl
	 * @date 创建日期 修改时间2020.12.28
	 */
	@Query(value = "select *  from vScenicPlan where iScenicID = :iScenicID order by dStartDate desc limit :iTempPageNo,:iPageSize", nativeQuery = true)
	List<VScenicPlan> findByScenic(@Param("iScenicID") int iScenicID, @Param("iTempPageNo") int iTempPageNo,
			@Param("iPageSize") int iPageSize);

	/**
	 * 通过景区ID查询进入计划单页面 分页
	 *
	 * 后台查询该景区计划单时用到 以开始时间倒序
	 * 
	 * @author 创建人 hanxl
	 * @date 创建日期 2020.12.28
	 */
	@Query(value = "select count(*)  from vScenicPlan where iScenicID = :iScenicID order by dStartDate desc", nativeQuery = true)
	int countByScenicID(@Param("iScenicID") int iScenicID);

	/**
	 * 前台景区菜单首页显示查询这些景区ID的计划日期大于当前日期的计划最小价格
	 * 
	 * @author 创建人 hanxl
	 * @date 创建日期 2021.01.13
	 */
	@Query(value = "SELECT a.* FROM vScenicPlan a INNER JOIN ( SELECT iScenicID, MIN( fPrice ) AS fMinPrice FROM vScenicPlan  WHERE NOW( ) BETWEEN dStartDate AND dEndDate GROUP BY iScenicID ) b ON a.iScenicID = b.iScenicID AND a.fPrice = b.fMinPrice", nativeQuery = true)
	List<VScenicPlan> getMinPrice();

	/**
	 * 通过景区ID查询
	 *
	 * 后台查询该景区详细信息时用到 以开始时间倒序
	 * 
	 * @author 修改人 hanxl
	 * @date 创建日期2021.01.14
	 */
	@Query(value = "select *  from vScenicPlan where iScenicID = :iScenicID order by dStartDate desc ", nativeQuery = true)
	List<VScenicPlan> getByScenic(@Param("iScenicID") int iScenicID);

	/**
	 * 查询该景区时间在计划日期内的计划
	 * 
	 * @author 修改人 hanxl
	 * @date 创建日期2021.01.14
	 */
	@Query(value = "select * from vScenicPlan where iScenicID = :iScenicID and dEndDate >= now()", nativeQuery = true)
	List<VScenicPlan> findPlanValid(@Param("iScenicID") int iScenicID);

	/**
	 * 函数功能说明：通过线路ID和时间查询：当天的计划单
	 *
	 * @param 参数说明
	 * @return 返回值说明 list
	 * @throws 异常处理说明
	 * @author 创建人liys
	 * @date 创建日期 2021.1.11
	 */
	@Query(value = "select iPlanID,cTicketName from vScenicPlan where iScenicID = :iScenicID and dEndDate >= :nowDate", nativeQuery = true)
	List<Map<String, Object>> findPlanValidMap(@Param("iScenicID") int iScenicID, @Param("nowDate") String strNowDate);

}
